home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / gfx / edit / AmiCAD_2.06.lha / AmiCAD / ARexx / TirerTraits.AmiCAD < prev    next >
Text File  |  2000-04-14  |  4KB  |  209 lines

  1. /* Décalage et alignement des extrémités d'un ensemble de lignes */
  2. /* Version 1.00 13/01/99 */
  3. /* Version 1.01 06/02/99, Ajout UNLOCK */
  4. /* Version 1.02 16/03/99, modif macro LIGNE */
  5. /* Version 1.03 22/09/99, correction bug si annulation GETPOINT (ajout UNLOCK) */
  6. /* Version 1.04 14/04/00, adaptation version 2.05 */
  7. /* $VER: 1.04 (© R.Florac, 14/04/00) */
  8. options results
  9.  
  10. signal on error
  11. signal on syntax
  12.  
  13. 'DEF LIGNE(P)=P&0X07FFF'
  14. 'DEF COLONNE(P)=P>>15'
  15. 'LOCK:SELECT("Extrémité à déplacer?"+CHR(10)+"Gauche"+CHR(10)+"Haut"+CHR(10)+"Droite"+CHR(10)+"Bas")'
  16. d=result
  17. select
  18.     when d=1 then do
  19.     'GETPOINT("Cliquez sur la colonne de destination")'; p=result
  20.     if p<0 then do
  21.         'UNLOCK'
  22.         exit
  23.     end
  24.     'COLONNE('p')'; col=result
  25.     'SAVEALL:FIRSTSEL'; o=result
  26.     do while o>0
  27.         mode=mode_ligne(o)
  28.         if mode~=-1000 then do
  29.         o = retracer_gauche(o,col,mode)
  30.         end
  31.         else do
  32.         'NEXTSEL('o')'; o=result
  33.         end
  34.     end
  35.     end
  36.     when d=2 then do
  37.     'GETPOINT("Cliquez sur la ligne de destination")'; p=result
  38.     if p<0 then do
  39.         'UNLOCK'
  40.         exit
  41.     end
  42.     'LIGNE('p')'; ligne=result
  43.     'SAVEALL:FIRSTSEL'; o=result
  44.     do while o>0
  45.         mode=mode_ligne(o)
  46.         if mode~=-1000 then do
  47.         o = retracer_haut(o,ligne,mode)
  48.         end
  49.         else do
  50.         'NEXTSEL('o')'; o=result
  51.         end
  52.     end
  53.     end
  54.     when d=3 then do
  55.     'GETPOINT("Cliquez sur la colonne de destination")'; p=result
  56.     if p<0 then do
  57.         'UNLOCK'
  58.         exit
  59.     end
  60.     'COLONNE('p')'; col=result
  61.     'SAVEALL:FIRSTSEL'; o=result
  62.     do while o>0
  63.         mode=mode_ligne(o)
  64.         if mode~=-1000 then do
  65.         o = retracer_droite(o,col,mode)
  66.         end
  67.         else do
  68.         'NEXTSEL('o')'; o=result
  69.         end
  70.     end
  71.     end
  72.     when d=4 then do
  73.     'GETPOINT("Cliquez sur la ligne de destination")'; p=result
  74.     if p<0 then do
  75.         'UNLOCK'
  76.         exit
  77.     end
  78.     'LIGNE('p')'; ligne=result
  79.     'SAVEALL:FIRSTSEL'; o=result
  80.     do while o>0
  81.         mode=mode_ligne(o)
  82.         if mode~=-1000 then do
  83.         o = retracer_bas(o,ligne,mode)
  84.         end
  85.         else do
  86.         'NEXTSEL('o')'; o=result
  87.         end
  88.     end
  89.     end
  90.     otherwise nop
  91. end
  92. 'UNLOCK'
  93. exit
  94.  
  95. mode_ligne: procedure
  96.     parse arg o
  97.     mode=-1000
  98.     'TYPE('o')'
  99.     select
  100.     when result=2 then mode=1   /* fil */
  101.     when result=15 then mode=2  /* ligne double */
  102.     when result=9 then mode=3   /* bus */
  103.     when result=8 then mode=0   /* pointillés */
  104.     when result=21 then do        /* ligne spéciale */
  105.         'PENWIDTH('o',-10000)'
  106.         mode=0-result
  107.     end
  108.     otherwise nop
  109.     end
  110.     return mode
  111.  
  112. minima: procedure
  113.     parse arg v1,v2
  114.     if v1<v2 then return v1
  115.     return v2
  116. end
  117.  
  118. maxima: procedure
  119.     parse arg v1,v2
  120.     if v1>v2 then return v1
  121.     return v2
  122. end
  123.  
  124. retracer_gauche: procedure
  125.     parse arg o,col,mode
  126.     'COORDS('o')'
  127.     PARSE VAR result x0 ',' y0 ',' x1 ',' y1
  128.     xg=minima(x0,x1)
  129.     if x0=x1 then x1=col
  130.     if xg=x0 then do
  131.     x2=x1; y2=y1;
  132.     end
  133.     else do
  134.     x2=x0; y2=y0; y0=y1
  135.     end
  136.     'DELETE('o'):DRAWMODE('mode'):DRAW('col','y0','x2','y2')'; no=result
  137.     if no=o then o=0
  138.     else do
  139.     'NEXTSEL('o-1')'; o=result
  140.     end
  141.     return o
  142.  
  143. retracer_haut: procedure
  144.     parse arg o,ligne,mode
  145.     'COORDS('o')'
  146.     PARSE VAR result x0 ',' y0 ',' x1 ',' y1
  147.     yh=minima(y0,y1)
  148.     if y0=y1 then y1=ligne
  149.     if yh=y0 then do
  150.     y2=y1; x2=x1;
  151.     end
  152.     else do
  153.     y2=y0; x2=x0; x0=x1
  154.     end
  155.     'DELETE('o'):DRAWMODE('mode'):DRAW('x0','ligne','x2','y2')'; no=result
  156.     if no=o then o=0
  157.     else do
  158.     'NEXTSEL('o-1')'; o=result
  159.     end
  160.     return o
  161.  
  162. retracer_droite: procedure
  163.     parse arg o,col,mode
  164.     'COORDS('o')'
  165.     PARSE VAR result x0 ',' y0 ',' x1 ',' y1
  166.     xd=maxima(x0,x1)
  167.     if x0=x1 then x0=col
  168.     if xd=x1 then do
  169.     x2=x0; y2=y0; y0=y1
  170.     end
  171.     else do
  172.     x2=x1; y2=y1
  173.     end
  174.     'DELETE('o'):DRAWMODE('mode'):DRAW('x2','y2','col','y0')'; no=result
  175.     if no=o then o=0
  176.     else do
  177.     'NEXTSEL('o-1')'; o=result
  178.     end
  179.     return o
  180.  
  181. retracer_bas: procedure
  182.     parse arg o,ligne,mode
  183.     'COORDS('o')'
  184.     PARSE VAR result x0 ',' y0 ',' x1 ',' y1
  185.     yb=maxima(y0,y1)
  186.     if y0=y1 then y1=ligne
  187.     if yb=y0 then do
  188.     y2=y1; x2=x1;
  189.     end
  190.     else do
  191.     y2=y0; x2=x0; x0=x1
  192.     end
  193.     'DELETE('o'):DRAWMODE('mode'):DRAW('x0','ligne','x2','y2')'; no=result
  194.     if no=o then o=0
  195.     else do
  196.     'NEXTSEL('o-1')'; o=result
  197.     end
  198.     return o
  199.  
  200. /* Traitement des erreurs, interruption du programme */
  201. syntax:
  202. erreur=RC
  203. 'MESSAGE("Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'"):UNLOCK'
  204. exit
  205.  
  206. error:
  207. 'MESSAGE("Erreur en ligne 'SIGL'"):UNLOCK'
  208. exit
  209.